#include<stdio.h>

// int fun()
// {
//     static int count = 1;
//     return ++count;
// }
int main()
{
    // int i =1;
    // int ret = (++i) + (++i) + (++i);
    // printf("%d\n",ret);
    // printf("%d\n",i);

    //内存单元的编号 == 地址 == 指针
    //c语言中又将地址称为指针
    //cpu中通信靠硬件中的线
    //地址总线 数据总线 控制总线
    //内存地址无需存储，（通过硬件实现记录内存单元）
    // int a = 0x11223344;
    // printf("%p\n",&a);
    // int n =20;
    // char ch = 'a';
    // char * pch = &ch;
    // printf("%p\n",&n);

    // int * pn = &n;//存储变量地址，pn指针变量（存放指针）
    // //pn的类型为int*    *说明pn是指针变量
    // printf("%p\n",pn);
    
    // int c = 10;
    // int* pc = &c;
    // printf("%d\n",*pc);

    // *pc = 19;
    // printf("%d\n",c);

    // //解引用操作符 - 间接访问操作符
    
    // int k = 18;
    // int* pk = &k;
    // //printf("%zd\n",sizeof(pk));//64位机器，64根地址线，8字节大小
    // //指针变量大小与类型无关 相同平台大小相同
    // //指针类型决定在解引用时访问几个字节
    // // printf("%p\n",pc);
    // // printf("%p\n",pc+1);//跳过一个变量指针类型的大小
    // // printf("%p\n",pch);
    // // printf("%p\n",pch+1);
    // //void*是无具体类型的指针（泛型指针）
    // //可接受任意类型的地址
    // //不能直接进行指针+-和解引用的运算

    // int d = 7;
    // void* pd = &d;
    // *(int*)pd = 8;

    int aa = 10;
    int* pa = &aa;
    printf("%d\n",*pa);
    *pa = 20;
    printf("%d\n",*pa);
    // int m = 9;
    const int m = 9;//被const修饰后具有常属性，不可被修改（常变量）
    //或int const m = 9;
    //m = 99;修改const会报错
    // 编译器在语法上限制修改，m本质还是变量（c语言）
    // m为常量（c++）
    const int k = 0;

    const int* pk = &k;
    *pk = 24;
    printf("%d",k);


    printf("%d",m);






    return 0;
}
